package pe.gob.osce.sirenas.dao.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import pe.gob.osce.sirenas.dao.HojaVidaDAOLocal;
import pe.gob.osce.sirenas.dao.convert.HojaVidaConvert;
import pe.gob.osce.sirenas.model.HojaVidaDTO;
import pe.gob.osce.sirenas.model.jpa.HojaVida;
import pe.gob.osce.sirenas.util.ConstanteEJB;
import pe.gob.osce.sirenas.util.ModeloException;

@Stateless
public class HojaVidaDAOImpl implements HojaVidaDAOLocal {

	@PersistenceContext(unitName="pe.gob.osce.sirenas.be.pu" )
	private	EntityManager	em;
	
	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);
	
	@Override
	public HojaVida insertar(HojaVida hojaVida ) throws Exception {
		try{
			em.merge(hojaVida);
			em.flush();
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_INSERT), e);
		}
		return hojaVida;
	}


	@Override
	public List<HojaVidaDTO> obtenerListaHojaVida(Long idPersona) throws Exception {
		List<HojaVidaDTO> listaHojaVidaDTO= new ArrayList<HojaVidaDTO>();

		try {
			StringBuilder jpql = new StringBuilder();
			jpql.append(" SELECT hoja FROM HojaVida hoja WHERE hoja.idPersona=:idPersona AND hoja.estado = 1 ");
						
			Query query = em.createQuery(jpql.toString());
			
			if(idPersona!=null){query.setParameter("idPersona", idPersona);}

			List<HojaVida> listaHojaVidaJPA = (ArrayList) query.getResultList();

			listaHojaVidaDTO = HojaVidaConvert.createListaDTO(listaHojaVidaJPA);

		} catch (NoResultException nre) {
			listaHojaVidaDTO= new ArrayList<HojaVidaDTO>();
			 throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_DATA));
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
		return listaHojaVidaDTO;
	}
	
	@Override
    public void inacticaHojaVidaPersona(Long idPersona, String codUsuario)throws Exception {
		try{
			StringBuilder          jpql= new StringBuilder();
			
            jpql.append(" UPDATE HojaVida hoja ");
            jpql.append(" SET hoja.hojaActiva = :hojaActiva ");
            jpql.append(" ,hoja.auditoria.fechaModifica = :fechaModifica ");
            jpql.append(" ,hoja.auditoria.usuarioModifica = :usuarioModifica ");
            jpql.append(" WHERE hoja.idPersona = :idPersona ");
			
			Query query= em.createQuery( jpql.toString() );

			query.setParameter("hojaActiva", false);
			query.setParameter("fechaModifica", new Date());
			query.setParameter("usuarioModifica", codUsuario);
			query.setParameter("idPersona", idPersona);
			        
			query.executeUpdate();
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
	}
}
